#include <stm32f10x.h>
#include <stdbool.h>
#include <stdio.h>

void delay_ms(unsigned int ms)
{
    int n = 0;
    while (ms--)
    {
        for (n = 0; n < 1000; n++)
            ;
    }
}

void init_gpio_a_b()
{
    GPIO_InitTypeDef def;

    def.GPIO_Mode = GPIO_Mode_Out_PP;
    def.GPIO_Pin = GPIO_Pin_0;
    def.GPIO_Speed = GPIO_Speed_50MHz;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

    GPIO_Init(GPIOA, &def);

    def.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &def);
}

uint8_t read_key()
{
    return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
}

void turn_on_light(bool f)
{
    if (f)
    {
        GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
    }
    else
    {
        GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
    }
}

int main()
{
    bool on = false;
    init_gpio_a_b();
    turn_on_light(false);
    while (true)
    {
        // if (read_key())
        // {
        //     turn_on_light(false);
        // }
        // else
        // {
        //     turn_on_light(true);
        // }

        if (!read_key())
        {
            delay_ms(10); // 消抖
            if (!read_key())
            {
                do
                {
                    delay_ms(1);
                } while (!read_key());
                on = !on;
            }
        }
        turn_on_light(on);
    }

    return 0;
}
